package 力扣日常刷题.木22二月.第16天222;

/**
 * @author 帅小伙
 * @date 2022/2/22
 * @description
 */
public class Demo132下一个排列2 {


    public void nextPermutation(int[] nums) {
        int n = nums.length;
        int i = n - 2,j = n - 1,k = n - 1;

        while(i >= 0 && nums[i] >= nums[j]){
            i--;
            j--;
        }// 找到第一个  小  大
       if(i >= 0){
           while(nums[i] >= nums[k]){
               k--;
           }
           swap(nums,i,k);
       }
       reverse(nums,j,n - 1);
    }

    void reverse(int[]nums,int a,int b) {
        while(a < b) {
            swap(nums,a++,b--);
        }
    }

    void swap(int[] nums,int a,int b) {
        int t = nums[a];
        nums[a] = nums[b];
        nums[b] = t;
    }

}
